home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 27 / CU Amiga Magazine's Super CD-ROM 27 (1998)(EMAP Images)(GB)[!][issue 1998-10].iso / CUCD / Programming / BlitzC2P / c2p060onlyCLS.ascii < prev    next >
Text File  |  1998-08-01  |  9KB  |  526 lines

  1. WBStartup
  2. NoCli
  3.  
  4. ; CLEARSCREEN version. Additional code by Paul West.
  5.  
  6. ; Non-clearscreen results:
  7.  
  8. ; 040/25 results:
  9.  
  10. ; 320x200 @42fps DoublePAL or 44fps PAL
  11. ; 320x256 @31fps DoublePAL or 34fps PAL
  12. ; 320x240 @33.7fps DoublePAL or 36.5fps PAL
  13.  
  14. #c2pBPLX=320
  15. #c2pBPLY=256
  16. #c2pBPLSIZE=(#c2pBPLX*#c2pBPLY)/8
  17.  
  18. #scrwidth=#c2pBPLX
  19. #scrheight=#c2pBPLY
  20. #screensize=#scrwidth*#scrheight
  21.  
  22. #clearscreento=$00000000
  23.  
  24. ; 060 friendly version
  25. ;       modulo  max res fscreen compu
  26. ; c2p1x1_8_c5     no  320x256?  no  030
  27.  
  28. Statement c2pGenericInit{A.l,B.l}
  29.  
  30.   ;A.l=d0=Width.w
  31.   ;B.l=d1=Height.w
  32.  
  33. ; d0.w  chunkyx [chunky-pixels]
  34. ; d1.w  chunkyy [chunky-pixels]
  35. ; d3.w  scroffsy [screen-pixels]
  36.  
  37.   MOVEQ.l #0,d3 ; Y offset
  38.  
  39. c2p1x1_8_c5_init
  40.   LEA c2p_datanew(pc),a0
  41.   ANDI.l  #$ffff,d0
  42.   MULU.w  d0,d3
  43.   LSR.l #3,d3
  44.   MOVE.l  d3,c2p_scroffs-c2p_data(a0)
  45.   MULU.w  d0,d1
  46.   MOVE.l  d1,c2p_pixels-c2p_data(a0)
  47. AsmExit
  48. End Statement
  49.  
  50. Statement c2pGeneric{A.l,B.l}
  51.  
  52.   MOVE.l  d0,a0 ; Chunky
  53.   MOVE.l  d1,a1 ; Planar
  54.  
  55. ; a0  c2pscreen
  56. ; a1  bitplanes
  57.  
  58. c2p1x1_8_c5
  59.   MOVEM.l a3-a6,-(a7)
  60.  
  61.   MOVEM.l a0-a1,-(a7)
  62.   LEA c2p_datanew,a0
  63.   LEA c2p_data,a1
  64.   MOVEQ #16-1,d0
  65. _c2pcopy: MOVE.l  (a0)+,(a1)+
  66.   DBF d0,_c2pcopy
  67.   MOVEM.l (a7)+,a0-a1
  68.   MOVE.l  a7,stackstore
  69.   MOVE.l  #clearscreento,a7
  70.  
  71.   LEA c2p_data(pc),a2
  72.  
  73.   MOVE.l  #$33333333,d5
  74.   MOVE.l  #$55555555,a6
  75.  
  76.   ADD.w #c2pBPLSIZE,a1
  77.   ADD.l c2p_scroffs-c2p_data(a2),a1
  78.  
  79.   MOVE.l  c2p_pixels-c2p_data(a2),a2
  80.   ADD.l a0,a2
  81.   CMP.l a0,a2
  82.   BEQ _none
  83.  
  84.   MOVEM.l a0-a1,-(a7)
  85.  
  86.   MOVE.l  (a0),d0
  87.   MOVE.l  a7,(a0)+
  88.   MOVE.l  (a0),d2
  89.   MOVE.l  a7,(a0)+
  90.   MOVE.l  (a0),d1
  91.   MOVE.l  a7,(a0)+
  92.   MOVE.l  (a0),d3
  93.   MOVE.l  a7,(a0)+
  94.  
  95.   MOVE.l  #$0f0f0f0f,d4   ; Merge 4x1, part 1
  96.   AND.l d4,d0
  97.   AND.l d4,d1
  98.   AND.l d4,d2
  99.   AND.l d4,d3
  100.   LSL.l #4,d0
  101.   LSL.l #4,d1
  102.   OR.l  d2,d0
  103.   OR.l  d3,d1
  104.  
  105.   MOVE.l  (a0),d2
  106.   MOVE.l  a7,(a0)+
  107.   MOVE.l  (a0),d6
  108.   MOVE.l  a7,(a0)+
  109.   MOVE.l  (a0),d3
  110.   MOVE.l  a7,(a0)+
  111.   MOVE.l  (a0),d7
  112.   MOVE.l  a7,(a0)+
  113.  
  114.   AND.l d4,d2     ; Merge 4x1, part 2
  115.   AND.l d4,d6
  116.   AND.l d4,d3
  117.   AND.l d4,d7
  118.   LSL.l #4,d2
  119.   LSL.l #4,d3
  120.   OR.l  d6,d2
  121.   OR.l  d7,d3
  122.  
  123.   MOVE.w  d2,d6     ; Swap 16x2
  124.   MOVE.w  d3,d7
  125.   MOVE.w  d0,d2
  126.   MOVE.w  d1,d3
  127.   SWAP  d2
  128.   SWAP  d3
  129.   MOVE.w  d2,d0
  130.   MOVE.w  d3,d1
  131.   MOVE.w  d6,d2
  132.   MOVE.w  d7,d3
  133.  
  134.   MOVE.l  d2,d6     ; Swap 2x2
  135.   MOVE.l  d3,d7
  136.   LSR.l #2,d6
  137.   LSR.l #2,d7
  138.   EOR.l d0,d6
  139.   EOR.l d1,d7
  140.   AND.l d5,d6
  141.   AND.l d5,d7
  142.   EOR.l d6,d0
  143.   EOR.l d7,d1
  144.   LSL.l #2,d6
  145.   LSL.l #2,d7
  146.   EOR.l d6,d2
  147.   EOR.l d7,d3
  148.  
  149.   MOVE.l  #$00ff00ff,d4
  150.   MOVE.l  d1,d6     ; Swap 8x1
  151.   MOVE.l  d3,d7
  152.   LSR.l #8,d6
  153.   LSR.l #8,d7
  154.   EOR.l d0,d6
  155.   EOR.l d2,d7
  156.   BRA _start1
  157. _x1
  158.   MOVE.l  (a0),d0
  159.   MOVE.l  a7,(a0)+
  160.   MOVE.l  (a0),d2
  161.   MOVE.l  a7,(a0)+
  162.   MOVE.l  (a0),d1
  163.   MOVE.l  a7,(a0)+
  164.   MOVE.l  (a0),d3
  165.   MOVE.l  a7,(a0)+
  166.   MOVE.l  d7,-c2pBPLSIZE(a1)
  167.  
  168.   MOVE.l  #$0f0f0f0f,d4   ; Merge 4x1, part 1
  169.   AND.l d4,d0
  170.   AND.l d4,d1
  171.   AND.l d4,d2
  172.   AND.l d4,d3
  173.   LSL.l #4,d0
  174.   LSL.l #4,d1
  175.   OR.l  d2,d0
  176.   OR.l  d3,d1
  177.  
  178.   MOVE.l  (a0),d2
  179.   MOVE.l  a7,(a0)+
  180.   MOVE.l  (a0),d6
  181.   MOVE.l  a7,(a0)+
  182.   MOVE.l  (a0),d3
  183.   MOVE.l  a7,(a0)+
  184.   MOVE.l  (a0),d7
  185.   MOVE.l  a7,(a0)+
  186.   MOVE.l  a3,c2pBPLSIZE(a1)
  187.  
  188.   AND.l d4,d2     ; Merge 4x1, part 2
  189.   AND.l d4,d6
  190.   AND.l d4,d3
  191.   AND.l d4,d7
  192.   LSL.l #4,d2
  193.   LSL.l #4,d3
  194.   OR.l  d6,d2
  195.   OR.l  d7,d3
  196.  
  197.   MOVE.w  d2,d6     ; Swap 16x2
  198.   MOVE.w  d3,d7
  199.   MOVE.w  d0,d2
  200.   MOVE.w  d1,d3
  201.   SWAP  d2
  202.   SWAP  d3
  203.   MOVE.w  d2,d0
  204.   MOVE.w  d3,d1
  205.   MOVE.w  d6,d2
  206.   MOVE.w  d7,d3
  207.   MOVE.l  a4,c2pBPLSIZE*2(a1)
  208.  
  209.   MOVE.l  d2,d6     ; Swap 2x2
  210.   MOVE.l  d3,d7
  211.   LSR.l #2,d6
  212.   LSR.l #2,d7
  213.   EOR.l d0,d6
  214.   EOR.l d1,d7
  215.   AND.l d5,d6
  216.   AND.l d5,d7
  217.   EOR.l d6,d0
  218.   EOR.l d7,d1
  219.   LSL.l #2,d6
  220.   LSL.l #2,d7
  221.   EOR.l d6,d2
  222.   EOR.l d7,d3
  223.  
  224.   MOVE.l  #$00ff00ff,d4
  225.   MOVE.l  d1,d6     ; Swap 8x1
  226.   MOVE.l  d3,d7
  227.   LSR.l #8,d6
  228.   LSR.l #8,d7
  229.   EOR.l d0,d6
  230.   EOR.l d2,d7
  231.   MOVE.l  a5,(a1)+
  232. _start1
  233.   AND.l d4,d6
  234.   AND.l d4,d7
  235.   EOR.l d6,d0
  236.   EOR.l d7,d2
  237.   LSL.l #8,d6
  238.   LSL.l #8,d7
  239.   EOR.l d6,d1
  240.   EOR.l d7,d3
  241.  
  242.   MOVE.l  a6,d4
  243.   MOVE.l  d1,d6     ; Swap 1x1
  244.   MOVE.l  d3,d7
  245.   LSR.l #1,d6
  246.   LSR.l #1,d7
  247.   EOR.l d0,d6
  248.   EOR.l d2,d7
  249.   AND.l d4,d6
  250.   AND.l d4,d7
  251.   EOR.l d6,d0
  252.   EOR.l d7,d2
  253.   ADD.l d6,d6
  254.   ADD.l d7,d7
  255.   EOR.l d1,d6
  256.   EOR.l d3,d7
  257.  
  258.   MOVE.l  d0,a4
  259.   MOVE.l  d2,a5
  260.   MOVE.l  d6,a3
  261.  
  262.   CMPA.l  a0,a2
  263.   BNE _x1
  264.   MOVE.l  d7,-c2pBPLSIZE(a1)
  265.   MOVE.l  a3,c2pBPLSIZE(a1)
  266.   MOVE.l  a4,c2pBPLSIZE*2(a1)
  267.   MOVE.l  a5,(a1)+
  268.  
  269.   MOVEM.l (a7)+,a0-a1
  270.   ADD.l #c2pBPLSIZE*4,a1
  271.  
  272.   MOVE.l  (a0),d0
  273.   MOVE.l  a7,(a0)+
  274.   MOVE.l  (a0),d2
  275.   MOVE.l  a7,(a0)+
  276.   MOVE.l  (a0),d1
  277.   MOVE.l  a7,(a0)+
  278.   MOVE.l  (a0),d3
  279.   MOVE.l  a7,(a0)+
  280.  
  281.   MOVE.l  #$f0f0f0f0,d4   ; Merge 4x1, part 1
  282.   AND.l d4,d0
  283.   AND.l d4,d1
  284.   AND.l d4,d2
  285.   AND.l d4,d3
  286.   LSR.l #4,d2
  287.   LSR.l #4,d3
  288.   OR.l  d2,d0
  289.   OR.l  d3,d1
  290.  
  291.   MOVE.l  (a0),d2
  292.   MOVE.l  a7,(a0)+
  293.   MOVE.l  (a0),d6
  294.   MOVE.l  a7,(a0)+
  295.   MOVE.l  (a0),d3
  296.   MOVE.l  a7,(a0)+
  297.   MOVE.l  (a0),d7
  298.   MOVE.l  a7,(a0)+
  299.  
  300.   AND.l d4,d2     ; Merge 4x1, part 2
  301.   AND.l d4,d6
  302.   AND.l d4,d3
  303.   AND.l d4,d7
  304.   LSR.l #4,d6
  305.   LSR.l #4,d7
  306.   OR.l  d6,d2
  307.   OR.l  d7,d3
  308.  
  309.   MOVE.w  d2,d6     ; Swap 16x2
  310.   MOVE.w  d3,d7
  311.   MOVE.w  d0,d2
  312.   MOVE.w  d1,d3
  313.   SWAP  d2
  314.   SWAP  d3
  315.   MOVE.w  d2,d0
  316.   MOVE.w  d3,d1
  317.   MOVE.w  d6,d2
  318.   MOVE.w  d7,d3
  319.  
  320.   MOVE.l  d2,d6     ; Swap 2x2
  321.   MOVE.l  d3,d7
  322.   LSR.l #2,d6
  323.   LSR.l #2,d7
  324.   EOR.l d0,d6
  325.   EOR.l d1,d7
  326.   AND.l d5,d6
  327.   AND.l d5,d7
  328.   EOR.l d6,d0
  329.   EOR.l d7,d1
  330.   LSL.l #2,d6
  331.   LSL.l #2,d7
  332.   EOR.l d6,d2
  333.   EOR.l d7,d3
  334.  
  335.   MOVE.l  #$00ff00ff,d4
  336.   MOVE.l  d1,d6     ; Swap 8x1
  337.   MOVE.l  d3,d7
  338.   LSR.l #8,d6
  339.   LSR.l #8,d7
  340.   EOR.l d0,d6
  341.   EOR.l d2,d7
  342.   BRA _start2
  343. _x2
  344.   MOVE.l  (a0),d0
  345.   MOVE.l  a7,(a0)+
  346.   MOVE.l  (a0),d2
  347.   MOVE.l  a7,(a0)+
  348.   MOVE.l  (a0),d1
  349.   MOVE.l  a7,(a0)+
  350.   MOVE.l  (a0),d3
  351.   MOVE.l  a7,(a0)+
  352.   MOVE.l  d7,-c2pBPLSIZE(a1)
  353.  
  354.   MOVE.l  #$f0f0f0f0,d4   ; Merge 4x1, part 1
  355.   AND.l d4,d0
  356.   AND.l d4,d1
  357.   AND.l d4,d2
  358.   AND.l d4,d3
  359.   LSR.l #4,d2
  360.   LSR.l #4,d3
  361.   OR.l  d2,d0
  362.   OR.l  d3,d1
  363.  
  364.   MOVE.l  (a0),d2
  365.   MOVE.l  a7,(a0)+
  366.   MOVE.l  (a0),d6
  367.   MOVE.l  a7,(a0)+
  368.   MOVE.l  (a0),d3
  369.   MOVE.l  a7,(a0)+
  370.   MOVE.l  (a0),d7
  371.   MOVE.l  a7,(a0)+
  372.   MOVE.l  a3,c2pBPLSIZE(a1)
  373.  
  374.   AND.l d4,d2     ; Merge 4x1, part 2
  375.   AND.l d4,d6
  376.   AND.l d4,d3
  377.   AND.l d4,d7
  378.   LSR.l #4,d6
  379.   LSR.l #4,d7
  380.   OR.l  d6,d2
  381.   OR.l  d7,d3
  382.  
  383.   MOVE.w  d2,d6     ; Swap 16x2
  384.   MOVE.w  d3,d7
  385.   MOVE.w  d0,d2
  386.   MOVE.w  d1,d3
  387.   SWAP  d2
  388.   SWAP  d3
  389.   MOVE.w  d2,d0
  390.   MOVE.w  d3,d1
  391.   MOVE.w  d6,d2
  392.   MOVE.w  d7,d3
  393.   MOVE.l  a4,c2pBPLSIZE*2(a1)
  394.  
  395.   MOVE.l  d2,d6     ; Swap 2x2
  396.   MOVE.l  d3,d7
  397.   LSR.l #2,d6
  398.   LSR.l #2,d7
  399.   EOR.l d0,d6
  400.   EOR.l d1,d7
  401.   AND.l d5,d6
  402.   AND.l d5,d7
  403.   EOR.l d6,d0
  404.   EOR.l d7,d1
  405.   LSL.l #2,d6
  406.   LSL.l #2,d7
  407.   EOR.l d6,d2
  408.   EOR.l d7,d3
  409.  
  410.   MOVE.l  #$00ff00ff,d4
  411.   MOVE.l  d1,d6     ; Swap 8x1
  412.   MOVE.l  d3,d7
  413.   LSR.l #8,d6
  414.   LSR.l #8,d7
  415.   EOR.l d0,d6
  416.   EOR.l d2,d7
  417.   MOVE.l  a5,(a1)+
  418. _start2
  419.   AND.l d4,d6
  420.   AND.l d4,d7
  421.   EOR.l d6,d0
  422.   EOR.l d7,d2
  423.   LSL.l #8,d6
  424.   LSL.l #8,d7
  425.   EOR.l d6,d1
  426.   EOR.l d7,d3
  427.  
  428.   MOVE.l  a6,d4
  429.   MOVE.l  d1,d6     ; Swap 1x1
  430.   MOVE.l  d3,d7
  431.   LSR.l #1,d6
  432.   LSR.l #1,d7
  433.   EOR.l d0,d6
  434.   EOR.l d2,d7
  435.   AND.l d4,d6
  436.   AND.l d4,d7
  437.   EOR.l d6,d0
  438.   EOR.l d7,d2
  439.   ADD.l d6,d6
  440.   ADD.l d7,d7
  441.   EOR.l d1,d6
  442.   EOR.l d3,d7
  443.  
  444.   MOVE.l  d0,a4
  445.   MOVE.l  d2,a5
  446.   MOVE.l  d6,a3
  447.  
  448.   CMPA.l  a0,a2
  449.   BNE _x2
  450.   MOVE.l  d7,-c2pBPLSIZE(a1)
  451.   MOVE.l  a3,c2pBPLSIZE(a1)
  452.   MOVE.l  a4,c2pBPLSIZE*2(a1)
  453.   MOVE.l  a5,(a1)+
  454.  
  455. _none
  456.   MOVE.l  stackstore(pc),a7
  457.   MOVEM.l (a7)+,a3-a6
  458.   AsmExit
  459.  
  460.   Even4
  461. stackstore: Dc.l 0
  462. c2p_data
  463. c2p_screen: Dc.l 0
  464. c2p_scroffs: Dc.l 0
  465. c2p_scroffs2: Dc.l 0
  466. c2p_c2pBPLSIZE: Dc.l 0
  467. c2p_pixels: Dc.l 0
  468.   Ds.l  16
  469.   Even4
  470. c2p_datanew
  471.   Ds.l  16
  472. End Statement
  473.  
  474.  
  475.  
  476. .blitzprogram
  477. ; Setup
  478. InitBank 0,(#scrwidth*#scrheight)+1000,2|65536 ; Chipram planar buffer
  479. CludgeBitMap 0,#scrwidth,#scrheight,8,Bank(0)
  480. InitPalette 0,256
  481. For c=0 To 255
  482.   AGAPalRGB 0,c,Rnd(c),Rnd(c),Rnd(c)
  483. Next c
  484. AGAPalRGB 0,0,0,0,0
  485. Screen 0,0,0,#scrwidth,#scrheight,8,0,"c2p test",0,0,0
  486. Use Palette 0
  487. VWait 50
  488. baseaddress1.l=AllocMem(#scrwidth*#scrheight,$10000) ; Fastram chunky buffer
  489.  
  490. ; Put something into the chunky buffer so we can see it working
  491. GetReg a0,baseaddress1
  492. MOVE.l  #0,d0
  493. MOVE.l  #screensize-1,d1
  494. cloop
  495.   MOVE.b  d0,(a0)+
  496.   ADDQ.l  #1,d0
  497.   SUBQ.l  #1,d1
  498.   TST.l   d1
  499.   BLT     done
  500.   BRA     cloop
  501. done
  502.  
  503. ; Do the c2p test
  504. c2pGenericInit{#scrwidth,#scrheight}
  505. VWait 20
  506. Forbid_
  507. VWait
  508. ResetTimer
  509. For time=1 To 800
  510.   c2pGeneric{baseaddress1,Bank(0)} ; Convert chunky to planar
  511. Next time
  512. t=Ticks
  513. VWait 2 : Permit_
  514. VWait 20
  515. FindScreen 0
  516. Window 0,0,11,640,100,0,"Test results for c2p",0,0
  517. WindowOutput 0
  518. NPrint "Routine performed @ ",50/(t/800),"fps - ",t," ticks"
  519. NPrint " "
  520. NPrint "Press mousebutton..."
  521. Free Screen 0
  522. MouseWait
  523. Free Window 0
  524. End
  525.  
  526.